package com.ncmmall.domain.business.shoppingcart;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.ncmmall.domain.business.goods.sku.GoodsSku;
import com.ncmmall.domain.business.goods.unit.GoodsUnit;
import com.ncmmall.domain.security.user.WebUser;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;

/**
 * @author linxs
 * @Description: 购物车
 * @Date: 2019-07-14 19:36
 */
@Entity
@Table(name = "mall_shopping_cart")
@Access(AccessType.FIELD)
@Getter
@Setter
public class ShoppingCart {


    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    /**
     * 所属用户
     */
    @JsonBackReference
    @OneToOne
    private WebUser member;

    /**
     * 商品名称
     */
    private String goodsName;

    /**
     * 当前参与的营销活动
     * 0、普通商品
     * 1、特价活动
     * 2、秒杀活动
     * 3、预售活动
     * 4、拼团活动
     */
    private int marketingType;

    /**
     * 商品缩略图
     */
    private String goodsImage;

    /**
     * 所选商品规格组合名
     */
    private String skuNames;

    /**
     * 所属SKU
     */
    @OneToOne
    private GoodsSku sku;

    /**
     * 商品单位（采购端）
     */
    @OneToOne
    private GoodsUnit unit;

    /**
     * 单位数量
     */
    private int unitQuantity;

    /**
     * 小计（元）
     */
    private double subtotalPrice;

    /**
     * 数量
     */
    private int quantity;

    /**
     * 商品ID
     */
    @Transient
    private long goodsId;

    /**
     * 商品状态
     * 1：待上架
     * 2：审核中
     * 3：审核通过（销售）
     * 4：审核拒绝
     * 5、下架
     * 6、售罄
     * 7、删除
     */
    @Transient
    private int goodsStatus;

    @Transient
    private int presellStatus;

    /**
     * 预售商品尾款开始支付时间
     */
    @Transient
    private String presellRetainagePayBeginTime;

    /**
     * 预售商品尾款截止支付时间
     */
    @Transient
    private String presellRetainagePayEndTime;

    /**
     * 秒杀活动状态
     * 1：待审核
     * 2：审核中
     * 3：审核通过，活动未开始
     * 4：审核被拒绝
     * 5：活动开始
     * 6：活动结束
     * 7：下架
     */
    @Transient
    private int seckillStatus;

    /**
     * 特价活动状态
     * 1：待审核
     * 2：审核中
     * 3：审核通过，活动未开始
     * 4：审核被拒绝
     * 5：活动开始
     * 6：活动结束
     * 7：下架
     */
    @Transient
    private int bargainStatus;

    /**
     * 拼团状态
     * 1：待审核
     * 2：审核中
     * 3：审核通过，活动未开始
     * 4：审核被拒绝
     * 5：活动开始
     * 6：活动结束
     * 7：下架
     */
    @Transient
    private int groupBookingStatus;


    /**
     * 所属最小单位
     */
    @Transient
    private GoodsUnit goodsUnit;

    /**
     * 附属单位
     */
    @Transient
    private GoodsUnit affiliatedUnit;

    /**
     * 附属单位数量
     */
    @Transient
    private int affiliatedUnitValue;

    /**
     * 最终单位
     */
    @Transient
    private GoodsUnit ultimateUnit;

    /**
     * 最终单位数量
     */
    @Transient
    private int ultimateUnitValue;

    /**
     * 单位换算
     */
    @Transient
    private int unitValue;

    /**
     * 临时数量
     */
    @Transient
    private int count;


}